package com.grt.condify.common.filter;

/**
 * Created by cy on 2015/8/29.
 * 通用类拦截器，主要辅助类文件扫描，当扫描的当前文件符合Filters当中的某一个Filter时，将对命中Filter进行执行 <p/>
 * <p>
 * 拦截器运行逻辑为首先通过doFilter方法对实例进行拦截,之后,通过调用isHit方法判断当前传入的对象是否符合拦截条件,并能够通过getHitFilter方法得到具体的拦截类.<p/>
 * <p>
 * 逻辑大体如下伪代码:<p/>
 * Filter[T] filter = new Filter(){...} <p/>
 * for(T t : List[T]) { <p/>
 * filter.doFilter(t);  <p/>
 * if(filter.isHit(xxx)) {  <p/>
 * T hitone = filter.getHitFilter();    <p/>
 * //后续业务逻辑 <p/>
 * }    <p/>
 * }    <p/>
 * 一般简单使用可以直接实现SimpleFilter即可,即所有的是否命中判断都在doFilter中进行,并将符合命中结果的对象赋予hitOne属性,详细参见SimpleFilter的描述<p/>
 */
public interface IFilter<T> {

    /**
     * 判断是否命中了指定了内容
     *
     * @param currentContent 待判断的内容
     * @return true 表示命中
     */
    boolean isHit(String currentContent);

    /**
     * 判断是否命中了指定了内容
     *
     * @param currentContent 待判断的内容
     * @return true 表示命中
     */
    boolean isHit(Class<?> currentContent);

    /**
     * 得到当前命中的Filter
     *
     * @return 命中的Filter
     */
    T getHitFilter();

    /**
     * 执行当前命中的处理内容
     *
     * @param currFilter 当前执行的处理内容
     * @throws RuntimeException 执行处理过程中出现问题抛出运行异常
     */
    void doFilter(T currFilter) throws RuntimeException;


}
